package cn.shop.cloud.web.msg;

import cn.shop.cloud.common.CodeMsg;

import java.text.MessageFormat;

/**
 * @program: shop-parent
 * @ClassName MemberCodeMsg
 * @description:
 * @author: Mokio
 * @create: 2024−12-24 13:50
 * @Version 2024 2.2 ; jdk1.8.0_181
 **/
// 自定义错误信息
public class MemberCodeMsg extends CodeMsg {
    // 继承自父类的构造函数
    public MemberCodeMsg(Integer code, String msg) {
        super(code, msg);
    }

    // 以静态常量的形式定义错误信息
    public static  final   MemberCodeMsg OP_ERROR = new MemberCodeMsg(5000101,"非法操作");
    public static  final   MemberCodeMsg LOGIN_ERROR = new MemberCodeMsg(5000102,"账号或者密码错误");
    public static  final   MemberCodeMsg PARAM_ERROR = new MemberCodeMsg(5000103,"参数校验:{0}");

    public MemberCodeMsg fillArgs(Object... args){// 可变长参数
        /*
        创建一个新对象，并使用本类的构造方法，但是是用的父类的get set方法，传进来的两个参数都是空
        这时候就有热心的同学会问了，既然都是空吗，那为什么不在父类写一个无参构造呢，
        那就是因为老刘懒，妈的害老子思考了半个小时才想明白

        诶呀这事搞得，其实我就知道老刘写的代码不一般，后续在调用该方法的时候是配合上边的静态常量PARAM_ERROR使用的
        那么此时的类中code和msg都是上边常量中的定义好的了，所以不是空，是有值的，
        那我们在这里将传进来的可变量参数可以说就是替换了原本msg参数校验后{0}的位置
        从而实现对不同异常不同情况的反馈，哎，这想了半个点到头来还想错了
         */
        MemberCodeMsg codeMsg = new MemberCodeMsg(this.getCode(),this.getMsg());
        // 把参数传进去
        codeMsg.setMsg(MessageFormat.format(codeMsg.getMsg(),args));

        return codeMsg;
    }


}
